package ma.co.ba.BusinessApplications.presentation.controllers.projets;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import ma.co.ba.BusinessApplications.business.clients.ClientBusiness;
import ma.co.ba.BusinessApplications.business.commons.CommonBusiness;
import ma.co.ba.BusinessApplications.business.projets.ProjetBusiness;
import ma.co.ba.BusinessApplications.business.utilisateurs.UtilisateurBusiness;
import ma.co.ba.BusinessApplications.model.Client;
import ma.co.ba.BusinessApplications.model.Projet;
import ma.co.ba.BusinessApplications.model.Utilisateur;
import ma.co.ba.BusinessApplications.presentation.components.ClientEditor;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;

@Controller
@RequestMapping("/projets")
public class ProjetController {
	@Autowired
	UtilisateurBusiness utilisateurBusiness;
	@Autowired
	ProjetBusiness projetBusiness;
	@Autowired
	CommonBusiness commonBusiness;
	@Autowired
	ClientEditor clientEditor;
	@Autowired
	ClientBusiness clientBusiness;
	
	@InitBinder
	public void initBinder(WebDataBinder binder) {
		 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		 binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat,true));
		 binder.registerCustomEditor(Client.class, this.clientEditor);

	}
	
	@RequestMapping(method = RequestMethod.POST)
	public String processSubmit(@ModelAttribute("newProjet") Projet newProjet,
			BindingResult result, SessionStatus status) {
	System.out.println("********************save Projet*******************************");
	System.out.println(newProjet.getNomProjet());	
		commonBusiness.saveEntity(newProjet);
		return "redirect:projets";
	}

	@RequestMapping(method = RequestMethod.GET)
	public String projetsPage(ModelMap model) {
		return "projets";
	}

	@RequestMapping(value="/delete", method = RequestMethod.GET)
	public String deleteProjet(@RequestParam("id") int projetId ,ModelMap model) {
		Projet projet = projetBusiness.getProjetById(projetId);
		commonBusiness.deleteEntity(projet);
		return "redirect:/projets";
	}
	
	
	
	
	@RequestMapping(value = "/update", method = RequestMethod.GET)
	public String updateProjetPage(ModelMap model,
			@RequestParam("id") int projetId) {
		Projet upProjet = projetBusiness.getProjetById(projetId);
	
		model.addAttribute("upProjet", upProjet);
		return "editProjet";
	}

	@RequestMapping(value = "/update", method = RequestMethod.POST)
	public String updateProjetSubmit(ModelMap model,
			@ModelAttribute("upProjet") Projet upProjet) {

//		Projet oldProjet = projetBusiness.getProjetById(upProjet.getId());
//		oldProjet.setMatricule(upProjet.getMatricule());
//		oldProjet.setPrenom(upProjet.getPrenom());
//		oldProjet.setNom(upProjet.getNom());
//		oldProjet.setEmail(upProjet.getEmail());
//		oldProjet.setGsm(upProjet.getGsm());
//		commonBusiness.updateEntity(oldProjet);
		
		commonBusiness.updateEntity(upProjet);
		return "redirect:/projets";
	}

	
	
	
	@ModelAttribute("projetsList")
	List<Projet> geProjetsList() {
		return projetBusiness.getAllProjets();
	}

	@ModelAttribute("newProjet")
	Projet getNewProjet() {
		return new Projet();
	}

	
	@ModelAttribute("clientsList")
	public Map<String, String> getClientsList() {
		List<Client> clients = null;
		clients = clientBusiness.getAllClients();

		Map<String, String> clientsList = new HashMap<String, String>();
		if (clients != null) {
			for (Client client : clients) {
				clientsList.put(client.getId() + "", client.getNomClient());
			}
		}
		return clientsList;
	}
	
	@ModelAttribute("utilisateurs")
	public List<Utilisateur> getUtilisateurs() {
		List<Utilisateur> utilisateurs = utilisateurBusiness
				.getAllConsultants();
		return utilisateurs;
	}
}
